// 36. 有效的数独

function isValidSudoku(board: string[][]): boolean {
  const row: boolean[][] = new Array(10)
      .fill(null)
      .map(() => new Array(10).fill(false)),
    col: boolean[][] = new Array(10)
      .fill(null)
      .map(() => new Array(10).fill(false)),
    box: boolean[][] = new Array(10)
      .fill(null)
      .map(() => new Array(10).fill(false));

  for (let i = 0; i < 9; i++) {
    for (let j = 0; j < 9; j++) {
      if (board[i][j] === ".") continue;
      const temp = parseInt(board[i][j]) - 1;
      if (
        row[i][temp] ||
        col[j][temp] ||
        box[Math.floor(i / 3) * 3 + Math.floor(j / 3)][temp]
      ) {
        return false;
      }
      row[i][temp] =
        col[j][temp] =
        box[Math.floor(i / 3) * 3 + Math.floor(j / 3)][temp] =
          true;
    }
  }
  return true;
}

const board = [
  [".", "8", "7", "6", "5", "4", "3", "2", "1"],
  ["2", ".", ".", ".", ".", ".", ".", ".", "."],
  ["3", ".", ".", ".", ".", ".", ".", ".", "."],
  ["4", ".", ".", ".", ".", ".", ".", ".", "."],
  ["5", ".", ".", ".", ".", ".", ".", ".", "."],
  ["6", ".", ".", ".", ".", ".", ".", ".", "."],
  ["7", ".", ".", ".", ".", ".", ".", ".", "."],
  ["8", ".", ".", ".", ".", ".", ".", ".", "."],
  ["9", ".", ".", ".", ".", ".", ".", ".", "."],
];

console.log(isValidSudoku(board));
